package com.huitone.smspfm.socket.protocol.sgip.message.msgbody;



import com.bin.common.utils.ArrayUtils;
import com.huitone.smspfm.socket.protocol.sgip.conversion.TransferConverter;

/**   
* @Title: Bind.java 
* @Package com.huitone.smspfm.socket.protocol.sgip.msgbody 
* @Description: TODO(用一句话描述该文件做什么) 
* @author ybliang   
* @date 2017年3月23日 上午11:03:46 
* @version V1.0   
*/
public class Bind implements IBody {
	
	public static enum LoginType {
		/**
		 * 1：业务端向短信平台建立的连接，用于发送命令
		 */
		CLIENT_TO_PLATFORM(1),
		/**
		 * 2：短信平台向业务端建立的连接，用于发送命令
		 */
		PLATFORM_TO_CLIENT(2);
		
		private int value;
		
		private LoginType(int value) {
			this.value = value;
		}
		
		public int getValue() {
			return value;
		}
	}
	
	/**
	 * @字节长度 21
	 * @数据类型 Text
	 * @DESC
	 * 	业务端编码
	 */
	private byte[] srvNode = new byte[21];
	
	/**
	 * @字节长度 1
	 * @数据类型 Integer
	 * @DESC
	 * 	登录类型。
		1：业务端向短信平台建立的连接，用于发送命令
		2：短信平台向业务端建立的连接，用于发送命令
		其它：保留
	 */
	private byte[] loginType = new byte[1];
	
	/**
	 * @字节长度 16
	 * @数据类型 Text
	 * @DESC
	 * 	服务器端给客户端分配的登录名
	 */
	private byte[] loginName = new byte[16];
	
	/**
	 * @字节长度 16
	 * @数据类型 Text
	 * @DESC
	 * 	服务器端和loginName对应的密码
	 */
	private byte[] loginPassword = new byte[16];
	
	private byte[] bind = null;
	
	public static Bind build(byte[] bytes) {
		
		Bind bind = new Bind();
		
		int index = 0;
		
		bind.srvNode = ArrayUtils.subarray(bytes, index , index += 21);
		bind.loginType = ArrayUtils.subarray(bytes, index, index += 1);
		bind.loginName = ArrayUtils.subarray(bytes, index, index += 16);
		bind.loginPassword = ArrayUtils.subarray(bytes, index, index += 16);
		
		return bind;
	}
	
	public static Bind build(String srvNode, int loginType, String loginName, String loginPassword) {
		
		Bind bind = new Bind();
		
		bind.setSrvNode(srvNode);
		bind.setLoginType(loginType);
		bind.setLoginName(loginName);
		bind.setLoginPassword(loginPassword);
		
		return bind;
	}
	
	public byte[] toByteArray() {
		
		if (bind == null) {
			bind = ArrayUtils.addAll(srvNode, loginType, loginName, loginPassword);
		}
		
		return bind;
	}

	public int length() {
		return toByteArray().length;
	}
	
	public String getSrvNode() {
		return TransferConverter.lj2Str(srvNode);
	}
	
	private void setSrvNode(String srvNode) {
		this.srvNode = TransferConverter.toLJ(this.srvNode, srvNode);
	}

	public int getLoginType() {
		return TransferConverter.bE2Int1(loginType);
	}

	private void setLoginType(int loginType) {
		this.loginType = TransferConverter.toBE1(loginType);
	}

	public String getLoginName() {
		return TransferConverter.lj2Str(loginName);
	}

	private void setLoginName(String loginName) {
		this.loginName = TransferConverter.toLJ(this.loginName, loginName);
	}

	public String getLoginPassword() {
		return TransferConverter.lj2Str(loginPassword);
	}

	private void setLoginPassword(String loginPassword) {
		this.loginPassword = TransferConverter.toLJ(this.loginPassword, loginPassword);
	}

	@Override
	public String toString() {
		return "Bind [业务端编码=" + getSrvNode() + ", 登录类型=" + getLoginType() + ", 登录名="
				+ getLoginName() + ",登录密码=" + getLoginPassword() + "]";
	}

	public String toSimpleString() {
		return getSrvNode() + " " + getLoginType() + " " + getLoginName() + " " + getLoginPassword();
	}

}
